package cn.cosmosx.api.framework;

import org.springframework.beans.factory.FactoryBean;

/**
 * 通过Bean工厂创建JDK动态代理实例
 *
 * @param <T>
 * @author geng
 */
public class ApiServiceFactoryBean<T> implements FactoryBean<T> {
    private final Class<T> interfaceClass;

    public ApiServiceFactoryBean(Class<T> interfaceClass) {
        this.interfaceClass = interfaceClass;
    }

    /**
     * 注入接口时会调用该方法，创建一个代理
     *
     * @return
     */
    @Override
    public T getObject() {
        // 创建接口对应的代理实例，注入到Spring容器中
        return new JdkDynamicHandler<T>().bind(interfaceClass);
    }


    @Override
    public Class<T> getObjectType() {
        return this.interfaceClass;
    }

    /**
     * 单例模式
     *
     * @return
     */
    @Override
    public boolean isSingleton() {
        return true;
    }
}
